#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<queue>
#include<string>
#include<vector>
#include<list>
using namespace std;

struct TreeNode 
{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k)
    {
        priority_queue<int> q;
        for (auto& e : nums)
        {
            q.push(e);
        }

        while (k > 1)
        {
            q.pop();
            k--;
        }

        return q.top();
    }

    int PrveOrder(TreeNode* root)
    {
        if (root == nullptr)
        {
            return 0;
        }

        return 1 + PrveOrder(root->left) + PrveOrder(root->right);
    }

    int countNodes(TreeNode* root)
    {
        return PrveOrder(root);
    }

    bool isUgly(int n)
    {
        if (n > 0 && n <= 6)
        {
            return true;
        }
        if (n <= 0)
        {
            return false;
        }
        while (n != 1)
        {
            if (n % 2 == 0)
            {
                n /= 2;
            }
            else if (n % 3 == 0)
            {
                n /= 3;
            }
            else if (n % 5 == 0)
            {
                n /= 5;
            }
            else return false;
        }
        return true;
    }
};

//int main()
//{
//    priority_queue<int> a;
//    priority_queue<int, vector<int>, greater<int> > c;
//    priority_queue<string> b;
//    
//    for (int i = 0; i < 5; i++)
//    {
//        a.push(i);
//        c.push(i);
//    }
//    while (!a.empty())
//    {
//        cout << a.top() << ' ';
//        a.pop();
//    }
//    cout << endl;
//    while (!c.empty())
//    {
//        cout << c.top() << ' ';
//        c.pop();
//    }
//    cout << endl;
//    b.push("abc");
//    b.push("abcd");
//    b.push("cbd");
//    while (!b.empty())
//    {
//        cout << b.top() << ' ';
//        b.pop();
//    }
//    cout << endl;
//    return 0;
//}

//typedef vector<int> Container;
typedef list<int> Container;
int main()
{
    Container cont = { 1, 2, 3, 4, 5 };
    Container::iterator iter, tempIt;
    for (iter = cont.begin(); iter != cont.end();)
    {
        tempIt = iter;
        ++iter;
        cont.erase(tempIt);
    }
    return 0;
}